"use strict";
// let arr: [number,string]=[1,"1212"]
// let arr1: Array<number|string> = ["a,b,v",1]
// alert(arr)
//1、使⽤ts实现双向链表，并且插⼊数据
// class Node{
//      ele:number
//      prev:any
//      next:any
//     constructor(element:number){
//         this.ele = element
//         this.next = null
//         this.prev = null
//     }
// }
// class DoubleList{
//     head:any
//     count:number
//     tail:any
//     constructor(){
//         this.head = null
//         this.count = 0
//         this.tail = null
//     }
//     insert(element:any,index:number){ 
//         if(index>=0&&index<=this.count){
//             let node = new Node(element);
//             let current = this.head;
//             if(index===0){
//                 if(this.head===null){ 
//                     this.head = node
//                     this.tail = node
//                 }else{
//                     node.next = this.head
//                     current.prev = node
//                     this.head = node
//                 }
//             }else if(index===this.count){ 
//                 current = this.tail
//                 current.next = node
//                 node.prev = current
//                 this.tail = node
//             }else{ 
//                 let previous = this.getElementAt(index-1)
//                 current = previous.next
//                 node.next = current
//                 previous.next = node
//                 current.prev = node
//                 node.prev = previous
//             }
//             this.count++
//             return true
//         }
//         return false
//     }
// }
// let d = new DoubleList()
// d.insert("a",0)
// d.insert("b",1)
// d.insert("c",2)
// d.insert("d",3)
// console.log(d)
//2、使⽤ts实现快速、插⼊、选择三种排序⽅式，分别排序链表中内容
// function fast(args:number[]){
//    let{length}= args
// //    console.log(args)
//    if(length<=1){
//        return args
//    }
//    let prove=args[0]
//    let left:number[]=[]
//    let right:number[]=[]
//    for(let i=1;i<length;i++){
//        if(args[i]<prove){
//            left.push(args[i])
//        }else{
//             right.push(args[i])
//        }
//    } 
// //    console.log(prove)
//   let L:number[]=fast(left)
// //   console.log(right)
//   let R:number[]=fast(right)
//   return L.concat(prove).concat(R)
// }
// console.log(fast([1,5,2,8,9,3,4]))
// function insertSort(arr:number[]){
//     let {length}=arr
//     for(let i=1;i<length;i++){
//         let j=i
//         // console.log(j,"********");
//         let temp
//         temp=arr[i]
//         while(j>0&&arr[j-1]>temp){
//             // console.log(arr[j],"---------");
//             arr[j]=arr[j-1]
//             j--
//         }
//         arr[j]=temp
//     }
//     return arr
// }
// console.log(insertSort([1,5,2,8,9,3,4]))
// function findSort(arr:number[]){
//     let {length}=arr
//     let min
//     for(let i=0;i<length;i++){
//         min=i
//         for(let j=i+1;j<length;j++){
//             if(arr[min]>arr[j]){
//                 min=j
//             }
//         }
//         if(i!=min){
//             [arr[i],arr[min]]=[arr[min],arr[i]]
//         }
//     }
//     return arr
// }  
// console.log(findSort([1,5,2,8,9,3,4]))
// //3、使⽤ts实现发布订阅模式
// class Events{
//     cbs:object[]
//     constructor(){
//         this.cbs=[]
//         //this.result=[]
//     }
//     on(emitFn:object){
//         //订阅
//         this.cbs.push(emitFn)
//     }
//     emit(){
//         //发布
//         this.cbs.forEach((emitFn)=>{
//             emitFn()
//         })
//     }
// }
// 4、总结ts的语⾔的特性
// enum 名 {}
// never 所有
// void 无返回值类型
// any 任意类型
// [string,number] 元组类型
// Array<number> number[]
// // ⽅法、接⼝、抽象类、装饰器
// 方法
// 重载 实例属性 类属性 
// 实例方法 类方法
// 类
// 继承 extends，抽象类 abstract
// 接口
// interface
// 装饰器
// @方法名
